//! $Id$
//!
//! @file    Resolver.h
//! @author  Johan Andersson <skagget77@gmail.com>
//! @date    Fri Oct 02 19:35 2009
//! @ingroup IoCppDetail
//!

#if !defined(IOCPP_RESOLVER_H)
#define IOCPP_RESOLVER_H

#include "IoCpp/Injector.h"
#include "IoCpp/Detail/ResolverCache.h"

namespace IoCpp
{
namespace Detail
{
   //!
   //! @author  Johan Andersson <skagget77@gmail.com>
   //! @date    Fri Oct 02 19:35 2009
   //! @ingroup IoCppDetail
   //!
   //! The Resolver class.
   //!
   class IOCPP_API Resolver
   {
   public :
      //!
      //! Creates a new instance of the Resolver class.
      //!
      Resolver();

      //!
      //! Returns the container's ResolverCache.
      //!
      //! @return The container's ResolverCache.
      //!
      ResolverCache& GetCache();

      //!
      //! Returns the container's Injector.
      //!
      //! @return The container's Injector.
      //!
      const Injector& GetInjector() const;

   private :
      // Prevent copying.
      Resolver( const Resolver& );
      Resolver& operator=( const Resolver& );

      // The container's ResolverCache.
      ResolverCache cache;

      // The container's Injector.
      Injector injector;
   };
}
}

#endif   // IOCPP_RESOLVER_H
